export { selectAndReadFile,selectAndWriteFile,readConfig } from './file'

/**
 * 从数组中随机抽取指定数量的元素
 * @param {Array} array - 原始数组
 * @param {number} count - 需要抽取的元素数量
 * @returns {Array} - 包含随机抽取元素的新数组
 */
export function randomSample(array, count) {
  // 1. 校验参数
  if (!Array.isArray(array) || count < 1 || count > array.length) {
    // 如果 count 不合法，返回空数组或原数组的拷贝，这里选择返回空数组
    return [];
  }

  // 2. 创建原数组的浅拷贝，防止修改原数组
  const shuffled = [...array];
  
  // 3. Fisher-Yates 洗牌算法的核心
  for (let i = shuffled.length - 1; i > shuffled.length - count - 1; i--) {
    // 生成一个从 0 到 i (包含 i) 的随机索引
    const randomIndex = Math.floor(Math.random() * (i + 1));
    
    // 将随机索引处的元素与当前末尾元素交换
    [shuffled[i], shuffled[randomIndex]] = [shuffled[randomIndex], shuffled[i]];
  }

  // 4. 从数组末尾截取指定数量的元素
  return shuffled.slice(shuffled.length - count);
}

